package com.pzhyd.sc.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;

/**
 * <p>Title: 图形验证码 </p>
 * <p>Description: 用于在ｗｅｂ开发中实现图形码验证 </p>
 * <p>Copyright: xinghua (c) 2008</p>
 * <p>Company: xinghua </p>
 * @author Parddu
 * @author parddu@163.com
 * @version 1.0
 * @serial jdk1.6
 */
public class MyImage {

	private BufferedImage img; //图片输入流
	private String rand; //验证码
	
	private MyImage(){}
	/**
	 * 获取图片验证码对象
	 * @return MyImage　验证码对象，其中包括图片和验证码
	 */
	public static MyImage getMyImage(){
		//创建验证码图片类
		MyImage myImage = new MyImage();
		//设定图片的大小
		int width=60, height=22;
		//创建图片文件
		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		//得到图片文件的绘图工具
		Graphics g = image.getGraphics();
		Random random = new Random();
		//设置绘图的颜色
		g.setColor(getRandColor(200,250));
		//设置在图片文件的那个范围内画内容
		g.fillRect(0, 0, width, height);
		//设置图片中的文字字体
		g.setFont(new Font("楷体",Font.PLAIN,18));
		String rand=""; //存储生成的验证码
		for (int i=0;i<4;i++){
		    String r=String.valueOf(random.nextInt(10));
		    rand+=r;
		    //设置绘图的颜色
		    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
		    //字体
		    g.drawString(r,13*i+6,16);
		}
		g.dispose();
		//将生成的图片和随机数存放在给定对象中
		myImage.setImg(image);
		myImage.setRand(rand);
		return myImage;
	}

	/**
	 * 得到图片
	 * @return BufferedImage 图片输出流
	 */
	public BufferedImage getImg() {
		return img;
	}

	private void setImg(BufferedImage img) {
		this.img = img;
	}

	/**
	 * 得到生成的验证码
	 * @return String 验证码
	 */
	public String getRand() {
		return rand;
	}

	private void setRand(String rand) {
		this.rand = rand;
	}

	/**
	 * 得到随机颜色
	 * @param fc
	 * @param bc
	 * @return
	 */
	private static Color getRandColor(int fc, int bc) {
		Random random = new Random();
		if (fc > 255)
			fc = 255;
		if (bc > 255)
			bc = 255;
		int r = fc + random.nextInt(bc - fc);
		int g = fc + random.nextInt(bc - fc);
		int b = fc + random.nextInt(bc - fc);
		return new Color(r, g, b);
	}
}
